To meet the continuing demand for high-capacity distributed data centers and the increasing need for scalable computing resources, the computer industry has pursued technologies to enable large scale deployments of cloud computing environments. Cloud computing environments, which make use of virtualization technologies, such as virtual networking and virtual machine architectures, provide enhanced flexibility in the deployment of services and hardware infrastructures, by allowing for the abstraction of physical resources into logical representations. However, some of these attractive aspects of cloud computing environments can pose management challenges, for example, in the areas of provisioning, monitoring, and deploying such resources, because the very abstractions that provide flexibility can impede manageability.
By way of example, a large-scale cloud computing environment may include numerous geographically dispersed computing nodes hosting numerous computing resources for numerous different tenants. For instance, computing equipment and systems from multiple vendors can be installed, and management, provisioning, and deployment of cloud computing resources may be performed on an ad hoc basis, without centralized management and/or control. Such conditions can lead to poor allocation of resources, in which some computing nodes are running at full capacity, and others are idling.
For example, current systems for choosing provisioning locations of virtual machines in a cloud computing environment only focus on static system information available at the time a virtual machine is provisioned, and do not take into account varying run-time resource utilization of virtual machines when allocating cloud computing resources. However, because each virtual machine may run for a long period of time, and during such time, may allocate and re-allocate cloud computing resources, initial static allocations can lead to wide departures from optimized load balancing of resources in a complex, distributed cloud computing environment.
In addition, multiple hypervisors, or virtual machine monitors, may each control the deployment of virtual machines across different computing nodes, based in part on software compatibility of the hypervisors and the computing nodes. In such a case, achieving a scalable, load-balanced deployment of numerous virtual machines is hampered because of the lack of multi-vendor interoperability and ability to allocate resources on a unified basis regardless of which hypervisor controls such resources.
Further, geographic dispersal of computing resources, varying levels of network bandwidth, disparate levels of processing resources, and the presence of multiple tenants on a given system, can lead to an extremely complex deployment model that is far beyond the ability of present tools and techniques to optimize and/or manage. Therefore, a need exists for methods, computer program products, and systems to intelligently provision cloud computing resources for virtual machines.